package leetcode;

/*
859. 亲密字符串
给定两个由小写字母构成的字符串 A 和 B ，只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果，就返回 true ；否则返回 false 。

示例 1：
输入： A = "ab", B = "ba"
输出： true
示例 2：
输入： A = "ab", B = "ab"
输出： false
示例 3:
输入： A = "aa", B = "aa"
输出： true
示例 4：
输入： A = "aaaaaaabc", B = "aaaaaaacb"
输出： true
示例 5：
输入： A = "", B = "aa"
输出： false
提示：
0 <= A.length <= 20000
0 <= B.length <= 20000
A 和 B 仅由小写字母构成。
*/

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class problems_859 {
    public static void main(String[] args) {
        System.out.println(new Solution().buddyStrings(
                "aa",
                "aa"
        ));
    }

    static class Solution {
        public boolean buddyStrings(String A, String B) {
            if(null == A && null == B) return true;
            if(null == A || null == B) return false;
            if(A.length() != B.length()) return false;
            // 比较
            List<Integer> listIndex= new ArrayList<>();
            for (int i = 0; i < A.length(); i++) {
                if(A.charAt(i) != B.charAt(i)) listIndex.add(i);
            }
            if (listIndex.isEmpty()){
                // 全部相同时，判断是否存在相同
                for (int i = 0; i < A.length(); i++) {
                    for (int j = i+1; j < A.length(); j++) {
                        if(A.charAt(i) == B.charAt(j)) return true;
                    }
                }
                return false;
            }
            if(listIndex.size() != 2) return false;
            if (A.charAt(listIndex.get(0)) == B.charAt(listIndex.get(1)) && A.charAt(listIndex.get(1)) == B.charAt(listIndex.get(0))){
                return true;
            }else {
                return false;
            }
        }
    }
}